package com.aqie.easy.doublePointer;

import java.util.Arrays;

/**
 * 283 移动零
 * TODO important
 */
public class MoveZeroes {
    /**
     * 将所有非零元素移到前面， 然后后面位置补零
     * @param nums
     */
    public static void moveZeroes(int[] nums) {
        int i = 0;
        for (int j = 0; j < nums.length; j++){
            if (nums[j] != 0){
                nums[i] = nums[j];
                i++;
            }
        }

        // 将后面位置补零
        for(int p = i; p < nums.length; p++){
            nums[p] = 0;
        }

    }

    /**
     * 1.慢指针（lastnonzerofoundat）之前的所有元素都是非零的。
     * 2.当前指针和慢速指针之间的所有元素都是零
     * 当我们遇到一个非零元素时，我们需要交换当前指针和慢速指针指向的元素，然后前进两个指针。如果它是零元素，我们只前进当前指针
     * @param nums
     */
    public static void moveZeroes2(int[] nums) {
        for (int last = 0, cur = 0; cur < nums.length; cur++){
            if (nums[cur] !=0){
                int tmp = nums[cur];
                nums[cur] = nums[last];
                nums[last] = tmp;
                last++;
            }

        }
    }

    public static void main(String[] args) {
        int[] arr = {0,1,0,3,4};
        moveZeroes2(arr);
        System.out.println(Arrays.toString(arr));
    }
}
